package py.progweb.sgc.gui.client.dialog;

import java.util.LinkedHashMap;
import java.util.List;

import py.progweb.sgc.gui.client.service.ABMService;
import py.progweb.sgc.gui.client.service.ABMServiceAsync;
import py.progweb.sgc.gui.client.service.DialogModelService;
import py.progweb.sgc.gui.client.service.DialogModelServiceAsync;
import py.progweb.sgc.gui.shared.dialogmodel.CajasModel;
import py.progweb.sgc.gui.shared.dialogmodel.DataRecord;
import py.progweb.sgc.model.Caja;
import py.progweb.sgc.model.Cajero;

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.widgets.form.fields.IntegerItem;
import com.smartgwt.client.widgets.form.fields.SelectItem;
import com.smartgwt.client.widgets.form.fields.TextItem;

public class FormularioCajeros extends FormularioBase {
	
	Cajero cajero = new Cajero();
	Caja c = new Caja();
	TextItem codCajeroPk, username, password,nombre,apellido, direccion, telefono;
	IntegerItem cedula;
	SelectItem cajas;
	List<DataRecord> listCajas;
	
	ABMServiceAsync abmService;	
	DialogModelServiceAsync service;
	
	public FormularioCajeros(VentanaBase padre) {
		super("Cajero",padre);		
		
		codCajeroPk = new TextItem();
		codCajeroPk.setTitle("codCajeroPk");
		codCajeroPk.setDisabled(true);
		
		username = new TextItem();
		username.setTitle("Username");
		username.setRequired(true);
		
		password = new TextItem();
		password.setTitle("Password");
		password.setRequired(true);
		
		cedula = new IntegerItem();
		cedula.setTitle("Cedula");
		cedula.setRequired(true);
		
		nombre = new TextItem();
		nombre.setTitle("Nombre");
		nombre.setRequired(true);
		
		apellido = new TextItem();
		apellido.setTitle("Apellido");
		apellido.setRequired(true);
		
		direccion = new TextItem();
		direccion.setTitle("Direccion");
		direccion.setRequired(false);
		
		telefono = new TextItem();
		telefono.setTitle("Telefono");
		telefono.setRequired(false);
		
		cajas = new SelectItem();
		cajas.setTitle("Cajas");
		cajas.setMultiple(false);
		cajas.setRequired(true);
		
		abmService = GWT.create(ABMService.class);
		service = GWT.create(DialogModelService.class);
		final LinkedHashMap<String, String> hashMap = new LinkedHashMap<String,String>();
		service.getCajasListadoModel(new AsyncCallback<CajasModel>(){

			@Override
			public void onFailure(Throwable arg0) {
				// TODO Auto-generated method stub
				Window.alert(arg0.getMessage());
			}

			@Override
			public void onSuccess(CajasModel arg0) {
				// TODO Auto-generated method stub
				//LinkedHashMap<Integer, String> hashMap = new LinkedHashMap<Integer,String>();
				FormularioCajeros.this.listCajas = arg0.getRecords();
				for(DataRecord item: FormularioCajeros.this.listCajas){
					//Window.alert(item.getAtributo("descripcion").toString());
					hashMap.put(item.getPK().toString(),item.getAtributo("descripcion").toString());
					
				}
				FormularioCajeros.this.cajas.setValueMap(hashMap);
			}
			
		});		
		this.setItems(codCajeroPk, username, password, cedula, nombre,apellido, direccion, telefono, cajas);		
	}

	@Override
	public void reset() {
		codCajeroPk.setValue("");
		username.setValue("");
		password.setValue("");
		cedula.setValue("");
		nombre.setValue("");
		apellido.setValue("");
		direccion.setValue("");
		telefono.setValue("");
		cajas.setValue("");
	}

	@Override
	protected void guardar() {
		if(!vacio(codCajeroPk.getValue()))
			cajero.setCodUsuario(Integer.parseInt(codCajeroPk.getValue().toString()));
		cajero.setUsername(username.getValue().toString());
		cajero.setPassword(password.getValue().toString());
		cajero.setCedula(Integer.parseInt(cedula.getValue().toString()));
		cajero.setNombre(nombre.getValue().toString());
		cajero.setApellido(apellido.getValue().toString());
		if (!vacio(direccion.getValue())){
			cajero.setDireccion(direccion.getValue().toString());
		}else{
			cajero.setDireccion("");
		}
		
		if (!vacio(telefono.getValue())){
			cajero.setTelefono(telefono.getValue().toString());
		}else{
			cajero.setTelefono("");
		}
		
		String seleccionada = cajas.getValue().toString();
		Caja c = new Caja();
		for(DataRecord item: this.listCajas){
				if (item.getPK().toString()== seleccionada){
					c.setCodCajaPk((Integer)item.getPK());
					c.setDescripcion(item.getAtributo("descripcion").toString());				
			}
		}
		cajero.setCaja(c);
		abmService.guardar(cajero, callback);
	}
	
	public void setData(DataRecord dr) {
		codCajeroPk.setValue(dr.getAtributo("codUsuario").toString());
		username.setValue((String)dr.getAtributo("username"));
		password.setValue((String)dr.getAtributo("password"));
		cedula.setValue((Integer)dr.getAtributo("cedula"));
		nombre.setValue((String)dr.getAtributo("nombre"));
		apellido.setValue((String)dr.getAtributo("apellido"));
		direccion.setValue((String)dr.getAtributo("direccion"));
		telefono.setValue((String)dr.getAtributo("telefono"));
		cajas.setValue(dr.getAtributo("caja.codCajaPk").toString());
	}
}
